package com.whfc.ms.api.sys.service;

import com.whfc.common.result.PageData;
import com.whfc.fuum.dto.SysDeptRoleDTO;
import com.whfc.fuum.dto.SysRuleDTO;
import com.whfc.fuum.dto.SysUserDTO;
import com.whfc.fuum.entity.SysEmpUser;
import com.whfc.fuum.entity.SysUser;
import com.whfc.fuum.param.*;

import java.util.List;

/**
 * @author qzexing
 * @version 1.0
 * @date 2020-12-11 15:06
 */
public interface MsSysUserService {

    /**
     * 根据条件获取用户列表
     *
     * @param loginUser
     * @param sysUserParam
     * @return
     */
    PageData<SysUserDTO> list(SysUser loginUser, SysUserListParam sysUserParam);

    /**
     * 根据用户ID查询用户
     *
     * @param userId 用户ID
     * @return
     */
    SysUserDTO queryUserById(Integer userId);


    /**
     * 组织机构添加用户
     *
     * @param deptUserAdd
     */
    void addDeptUser(SysDeptUserAdd deptUserAdd);

    /**
     * 实名制人员关联用户
     *
     * @param empUserAdd
     */
    void addEmpUser(SysEmpUserAdd empUserAdd);

    SysEmpUser getEmpUser(Integer empId);
    /**
     *
     * @param userDeptRolesAdd
     */
    void addDeptRoles(SysUserDeptRolesAdd userDeptRolesAdd);

    /**
     * 修改组织机构用户
     *
     * @param deptUserEdit
     */
    void editDeptUser(SysDeptUserEdit deptUserEdit);

    /**
     * 删除用户
     *
     * @param sysUser
     * @param userId
     */
    void del(SysUser sysUser, Integer userId);

    /**
     * 编辑用户
     *
     * @param sysUserEdit
     * @return
     */
    void edit(SysUserEdit sysUserEdit);

    /**
     * 禁用或启动用户
     *
     * @param id
     * @param status
     */
    void enable(Integer id, Integer status, Integer userId);

    /**
     * 修改密码
     *
     * @param sysUser
     * @param request
     */
    void updatePassword(SysUser sysUser, UpdatePasswordParam request);

    /**
     * 重置密码
     *
     * @param request
     */
    void resetPassword(SysResetPasswordParam request);

    /**
     * 查询当前登录用户可以管理的所有权限
     *
     * @param loginUser
     * @param platform
     * @return
     */
    List<SysRuleDTO> getUserRuleList(SysUser loginUser, Integer platform);

    /**
     * 根据组织机构获取用户权限
     *
     * @param loginUser
     * @param platform
     * @param deptId
     * @return
     */
    List<SysRuleDTO> getUserRuleListByDeptId(SysUser loginUser, Integer platform, Integer deptId);



    /**
     * 内部帐号列表
     *
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @return
     */
    PageData<SysUserDTO> innerUserList(Integer pageNum, Integer pageSize, String keyword);

    /**
     * 添加内部帐号
     *
     * @param request
     */
    void innerUserAdd(SysInnerUserAddParam request);

    /**
     * 编辑内部账号
     *
     * @param request
     */
    void innerUserEdit(SysInnerUserEditParam request);

    /**
     * 获取用户部门角色
     *
     * @param sysUser
     * @param userId
     * @param deptId
     * @return
     */
    List<SysDeptRoleDTO> getUserDeptRoles(SysUser sysUser, Integer userId, Integer deptId);

    /**
     * 编辑组织机构角色
     *
     * @param request
     */
    void editDeptRoles(SysUserRoleEdit request);

}
